/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica.Controladoras.Vehiculo;

import Logica.Core.Movimientos.Movimiento;
import Logica.Core.Vehiculo.Agricola;
import Logica.Core.Vehiculo.Rodado;
import Persistencia.ControladoraPersistencia;
import Persistencia.JPAControllers.exceptions.NonexistentEntityException;
import Persistencia.JPAControllers.exceptions.PreexistingEntityException;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Daniel
 */
public final class ControladoraLogicaVehiculo {

    protected ControladoraPersistencia miControladora;
    private List<Rodado> misRodados = new LinkedList<>();
    private List<Agricola> misAgricolas = new LinkedList<>();

    public ControladoraLogicaVehiculo(ControladoraPersistencia miControladora) {
        this.miControladora = miControladora;


        misRodados = dameMisRodados();
        misAgricolas = dameMisAgricolas();

    }

    // <editor-fold defaultstate="collapsed" desc="Clase Rodado">
    public void crearRodado(double km, String patente, List<Movimiento> misMovimientos) throws PreexistingEntityException, Exception {

        misRodados = dameMisRodados();
        boolean encontro = false;
        Rodado miNuevaRodado = new Rodado(km, patente, misMovimientos);


        for (int i = 0; i < misRodados.size() && !encontro; i++) {
            Rodado miRodado = misRodados.get(i);
            if (miRodado.getPatente().equals(patente)) {
                encontro = true;
                throw new PreexistingEntityException("Rodado ya Existente.");
            }
        }

        misRodados.add(miNuevaRodado);
        miControladora.getMiPersistenciaRodado().crearRodado(miNuevaRodado);
    }

    public void eliminarRodado(String patente) throws NonexistentEntityException, Exception {
        misRodados = dameMisRodados();
        boolean encontro = false;
        Rodado miRodado = null;

        for (int i = 0; i < misRodados.size() && !encontro; i++) {
            miRodado = misRodados.get(i);
            if (miRodado.getPatente().equals(patente)) {
                encontro = true;
                misRodados.remove(i);
            }
        }

        miControladora.getMiPersistenciaRodado().eliminarRodado(patente);
    }

    public void modificarRodado(double km, String patente, List<Movimiento> misMovimientos) throws NonexistentEntityException, Exception {
        misRodados = dameMisRodados();
        int pos = 0;
        boolean encuenetraRodado = false;
        Rodado miRodado = null;

        for (int i = 0; i < misRodados.size() && !encuenetraRodado; i++) {
            miRodado = misRodados.get(i);
            if (miRodado.getPatente().equals(patente)) {
                pos = i;
                encuenetraRodado = true;
            }
        }

        miRodado.setKm(km);
        miRodado.setMisMovimientos(misMovimientos);

        misRodados.set(pos, miRodado);
        miControladora.getMiPersistenciaRodado().modificarRodado(miRodado);
    }

    public Rodado dameUnRodado(String patente) {
        misRodados = dameMisRodados();
        boolean encontro = false;
        Rodado miRodado = null;

        for (int i = 0; i < misRodados.size() && !encontro; i++) {
            miRodado = misRodados.get(i);
            if (miRodado.getPatente().equals(patente)) {
                encontro = true;
            }
        }

        return miRodado;
    }

    public List<Rodado> dameMisRodados() {
        misRodados = miControladora.getMiPersistenciaRodado().dameMisRodado();
        return misRodados;
    }
    // </editor-fold>

    // <editor-fold defaultstate="collapsed" desc="Clase Agricola">
    public void crearAgricola(double horasUso, String patente, List<Movimiento> misMovimientos) throws PreexistingEntityException, Exception {

        misAgricolas = dameMisAgricolas();
        boolean encontro = false;
        Agricola miNuevaAgricola = new Agricola(horasUso, patente, misMovimientos);


        for (int i = 0; i < misAgricolas.size() && !encontro; i++) {
            Agricola miAgricola = misAgricolas.get(i);
            if (miAgricola.getPatente().equals(patente)) {
                encontro = true;
                throw new PreexistingEntityException("Agricola ya Existente.");
            }
        }

        misAgricolas.add(miNuevaAgricola);
        miControladora.getMiPersistenciaAgricola().crearAgricola(miNuevaAgricola);
    }

    public void eliminarAgricola(String patente) throws NonexistentEntityException, Exception {
        misAgricolas = dameMisAgricolas();
        boolean encontro = false;
        Agricola miAgricola = null;

        for (int i = 0; i < misAgricolas.size() && !encontro; i++) {
            miAgricola = misAgricolas.get(i);
            if (miAgricola.getPatente().equals(patente)) {
                encontro = true;
                misAgricolas.remove(i);
            }
        }

        miControladora.getMiPersistenciaAgricola().eliminarAgricola(patente);
    }

    public void modificarAgricola(double horasUso, String patente, List<Movimiento> misMovimientos) throws NonexistentEntityException, Exception {
        misAgricolas = dameMisAgricolas();
        int pos = 0;
        boolean encuenetraAgricola = false;
        Agricola miAgricola = null;

        for (int i = 0; i < misAgricolas.size() && !encuenetraAgricola; i++) {
            miAgricola = misAgricolas.get(i);
            if (miAgricola.getPatente().equals(patente)) {
                pos = i;
                encuenetraAgricola = true;
            }
        }

        miAgricola.setHorasUso(horasUso);
        miAgricola.setMisMovimientos(misMovimientos);

        misAgricolas.set(pos, miAgricola);
        miControladora.getMiPersistenciaAgricola().modificarAgricola(miAgricola);
    }

    public Agricola dameUnAgricola(String patente) {
        misAgricolas = dameMisAgricolas();
        boolean encontro = false;
        Agricola miAgricola = null;

        for (int i = 0; i < misAgricolas.size() && !encontro; i++) {
            miAgricola = misAgricolas.get(i);
            if (miAgricola.getPatente().equals(patente)) {
                encontro = true;
            }
        }

        return miAgricola;
    }

    public List<Agricola> dameMisAgricolas() {
        misAgricolas = miControladora.getMiPersistenciaAgricola().dameMisAgricola();
        return misAgricolas;
    }
    // </editor-fold>
}
